//
//  VistaBuscarTiendaEnTodas.m
//  ProyectoMoviTiendas
//
//  Created by Daniel Paez on 3/7/12.
//  Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//

#import "VistaBuscarTiendaEnTodas.h"
#import "MoviTiendas.h"
#import "Tienda.h"
#import "VistaCategoriasTienda.h"
#import "VistaCategoriasProducto.h"
#import "VistaInfoTienda.h"


@interface VistaBuscarTiendaEnTodas ()
{    
    Tienda *tienda;
}


@end

@implementation VistaBuscarTiendaEnTodas
@synthesize segControl, lblNoFavoritas, barBusqueda, principal, tiendas, favoritas, resultados;



- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) 
    {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    principal = [MoviTiendas darInstancia];
    
    
    tiendas = principal.tiendas;
    favoritas = principal.cliente.favoritas;
    resultados = [[NSMutableArray alloc] initWithArray:tiendas];
                  
    

    // Uncomment the following line to preserve selection between presentations.
    // self.clearsSelectionOnViewWillAppear = NO;
 
    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    // self.navigationItem.rightBarButtonItem = self.editButtonItem;
}

- (void)viewDidUnload
{
    segControl = nil;
    [self setSegControl:nil];
    lblNoFavoritas = nil;
    [self setLblNoFavoritas:nil];
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

#pragma mark - Table view data source

//Número de secciones de la tabla
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{

    // Return the number of sections.
    return 1;
}

//Número de filas en cada sección
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{    
    int cuantas=0;
    // Return the number of rows in the section.
    
    //Está buscando
    if(barBusqueda.isFirstResponder)
    {
        cuantas = [resultados count];        
    }
    
    //No está buscando
    else
    {
        //Está en Todas
        if(segControl.selectedSegmentIndex==0)
        {           
            resultados = [NSMutableArray arrayWithArray:tiendas];
            
            cuantas=[resultados count] + 1;
        }
        
        //Está en Favoritas
        else
        {
            resultados = [NSMutableArray arrayWithArray:favoritas];            
            
            //Tiene favoritas
            if([resultados count]!=0)
            {
                cuantas = [resultados count];
            }       
        }
    }    
      
   return cuantas;
}

//Pintar las celdas
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    
    if (!cell)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
    
    //Está buscando
    if(barBusqueda.isFirstResponder)
    {
        Tienda * tienda = [resultados objectAtIndex:[indexPath row]];
        cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;                
        cell.textLabel.text = tienda.nombre;                                     
    }
    
    //No está buscando
    else
    {
        //Está en todas
        if(segControl.selectedSegmentIndex==0)
        {         
            [lblNoFavoritas setHidden:YES];
           
            //Primera fila se pinta diferente
            if ([indexPath row] == 0) 
            {
                cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
                cell.textLabel.text = @"Buscar en todas las tiendas";
            }
            
            //El resto de filas se pintan igual
            else 
            {                
                cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;                
                Tienda * tienda = [resultados objectAtIndex:[indexPath row]-1];
                cell.textLabel.text = tienda.nombre;                
            }            
        }
        
        //Está en Favoritas
        else
        {         
            //Si cliente no tiene favoritas es un caso contemplado en el método switchSegmentedControl
            
            //Cliente tiene favoritas
            if([resultados count]>0)
            {
                [lblNoFavoritas setHidden:YES];
                /*
                 //Primera fila se pinta diferente
                 if ([indexPath row] == 0) 
                 {
                 cell.textLabel.text = @"Buscar en todas las tiendas favoritas";
                 }
                 
                 //El resto de filas se pintan igual
                 else
                 {*/
                
                Tienda * tienda = [resultados objectAtIndex:[indexPath row]];
                cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;                
                cell.textLabel.text = tienda.nombre;                                    
                //}
            }       
        }
    }    
    return cell;
}

/*
// Override to support conditional editing of the table view.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Return NO if you do not want the specified item to be editable.
    return YES;
}



// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        // Delete the row from the data source
        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
    }   
    else if (editingStyle == UITableViewCellEditingStyleInsert) {
        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
    }   
}



// Override to support rearranging the table view.
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
{
}
*/

/*
// Override to support conditional rearranging of the table view.
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Return NO if you do not want the item to be re-orderable.
    return YES;
}
*/

#pragma mark - Table view delegate


//Click en las celdas
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{    
    //Click en primera fila de Todas
    if([indexPath row] == 0 && segControl.selectedSegmentIndex==0)
    {
       [self performSegueWithIdentifier:@"verCategoriasProducto" sender:self];      
    }
    
    //Click en cualquier otra fila de Todas
    else if( segControl.selectedSegmentIndex==0) 
    {
        tienda = [resultados objectAtIndex:[indexPath row]-1];
       [self performSegueWithIdentifier:@"verCategoriasTienda" sender:self];    
    }
    
    //Click en cualquier fila de Favoritas
    else 
    {
        tienda = [resultados objectAtIndex:[indexPath row]];
        [self performSegueWithIdentifier:@"verCategoriasTienda" sender:self];  
    }
    
    // Navigation logic may go here. Create and push another view controller.
    /*
     <#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc] initWithNibName:@"<#Nib name#>" bundle:nil];
     // ...
     // Pass the selected object to the new view controller.
     [self.navigationController pushViewController:detailViewController animated:YES];
     */
}

//Click en botoón accesorio
- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath
{
    //Está buscando
    if(barBusqueda.isFirstResponder)
    {
        //Está en Todas
        if( segControl.selectedSegmentIndex==0) 
        {
            tienda = [resultados objectAtIndex:[indexPath row]];            
        }
        
        //Está en Favoritas
        else 
        {
            tienda = [resultados objectAtIndex:[indexPath row]];
        }        
    }
    
    //No está buscando
    else 
    {
        //Está en Todas
        if( segControl.selectedSegmentIndex==0) 
        {
            tienda = [resultados objectAtIndex:[indexPath row]-1];            
        }
        
        //Está en Favoritas
        else 
        {
            tienda = [resultados objectAtIndex:[indexPath row]];
        }
    }
        
    [self performSegueWithIdentifier:@"verInfoTienda" sender:self];      
}


//Método para manejar el cambio en el segmented control (Todas y Favoritas)
- (IBAction)switchSegmentedControl:(id)sender 
{
    //Si dio click en Todas
    if(segControl.selectedSegmentIndex==0)
    {
        resultados = [NSMutableArray arrayWithArray:tiendas];
        [self.tableView reloadData];
    }
    
    //Si dio click en Favoritas
    else 
    {
        resultados = [NSMutableArray arrayWithArray:favoritas];
        [self.tableView reloadData];
        
        //Si no tiene favoritas
        if([resultados count]==0)
        {
            [lblNoFavoritas setHidden:NO];
            lblNoFavoritas.text=@"Usted no tiene ninguna tienda favorita";                              
        }        
    }   
}


//Método para realizar búsquedas sobre las tiendas
-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{    
    //Estaba en Todas
    if(segControl.selectedSegmentIndex==0)
    {
        //No se escribió nada
        if([searchText length] == 0)
        {
            [resultados removeAllObjects];
            [resultados addObjectsFromArray:tiendas];
        }
        
        //Escribió algo
        else 
        {
            [resultados removeAllObjects];
            
            
            for (int i=0; i<[tiendas count]; i++)
            {
                Tienda *tienda = [tiendas objectAtIndex:i];
                
                NSRange r = [tienda.nombre rangeOfString:searchText options:NSCaseInsensitiveSearch];
                if(r.location != NSNotFound)
                {                     
                    [resultados addObject:tienda];   
                }
            }
        }
    }
    
    //Estaba en Favoritas
    else
    {
        //No se escribió nada
        if([searchText length] == 0)
        {
            [resultados removeAllObjects];
            [resultados addObjectsFromArray:favoritas];
        }
        
        //Escribió algo
        else 
        {
            [resultados removeAllObjects];
            
            
            for (int i=0; i<[favoritas count]; i++)
            {
                Tienda *tienda = [favoritas objectAtIndex:i];
                
                NSRange r = [tienda.nombre rangeOfString:searchText options:NSCaseInsensitiveSearch];
                if(r.location != NSNotFound)
                {                     
                    [resultados addObject:tienda];   
                }
            }
        }
    }
}

//Método para hacer la transición a otras vistas
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    NSString * destino = segue.identifier; 
    
    if([destino isEqualToString:@"verCategoriasProducto"])
    {
        VistaCategoriasProducto * vista = [segue destinationViewController];
        vista.categorias = principal.categorias;                
    }
    
    else if([destino isEqualToString:@"verCategoriasTienda"])
    {
        VistaCategoriasTienda * vista = [segue destinationViewController];
        vista.tienda = tienda;
    }
    
    else if([destino isEqualToString:@"verInfoTienda"])
    {
        VistaInfoTienda * vista = [segue destinationViewController];        
        vista.tienda = tienda;
        vista.title = tienda.nombre;        
    }
}

@end
